package com.mlh.springboot.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Slf4j
@Controller
public class UploadController {
	//写一个方法访问 upload.html
	//因为引入了 thymeleaf-starter
	//所有 return "upload"  会去 \templates 文件下去找upload.html
	@GetMapping("/upload.html")
	public String uploadPage(){
		return "upload";
	}

	// MultipartFile 自动封装上传过来的文件
	@PostMapping("/upload")
	@ResponseBody
	public String fileUpload(@RequestParam("name")String name,
	                         @RequestParam("email")String email,
	                         @RequestParam("age") Integer age,
	                         @RequestParam("job")String job,
	                         @RequestPart("header") MultipartFile header,
	                         @RequestPart("photos") MultipartFile[] photos
	                         ) throws IOException {
		log.info("上传的信息：email={}，name={}，age={}, job={}, header={}，photos={}",
				email, name, age, job, header.getSize(), photos.length);
		//我们先将文件保存到指定的目录
		// if(!header.isEmpty()){//处理头像
		// 	//获取上传文件的文件名
		// 	String originalFilename = header.getOriginalFilename();
		// 	File file = new File("D:\\JavaWeb\\springboot\\quickstart\\src\\main\\resources\\public\\img_upload\\"+originalFilename);
		// 	header.transferTo(file);
		// }
		// if(photos.length>0){//处理宠物图片
		// 	for (MultipartFile photo : photos) {
		// 		if(!photo.isEmpty()){
		// 			String originalFilename = header.getOriginalFilename();
		// 			File file = new File("D:\\JavaWeb\\springboot\\quickstart\\src\\main\\resources\\public\\img_upload\\"+originalFilename);
		// 			header.transferTo(file);
		// 		}
		// 	}
		// }

		//下面通过动态创建文件的方式保存上传的文件
		//获取项目运行时的类路径
		String path = ResourceUtils.getURL("classpath:").getPath();
		log.info(path);//path=/D:/JavaWeb/springboot/quickstart/target/classes/
		//动态创建文件
		//增加功能：将文件能够根据当日日期的不同存放在不同的文件夹下
		//增加功能：上传图片存在文件名重复问题
		//获取当日日期
		LocalDate currentDate = LocalDate.now();
		// 格式化日期字符串，例如：2024-03-03
		String dateStr = currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		File file = new File(path + "/" + "static/images/upload/"+dateStr+"/");

		//File file = new File(path + "/" + "static/images/upload/");
		if(!file.exists()){//如果目录不存在，我们就创建
			file.mkdir();
		}
		if(!header.isEmpty()){//处理头像
			//获取上传文件的文件名
			String originalFilename = header.getOriginalFilename();
			//这里我们需要指定保存文件的绝对路径
			log.info(file.getAbsolutePath());
			File uploadFile=new File(file.getAbsolutePath()+"/"+originalFilename);
			int i=1;//给重复文件的文件加上一个后缀
			while(uploadFile.exists()){//while循环 直到没有重复文件名为止
				//以 . 分割完整文件名，这样一个就是文件名  还有一个是文件后缀
				String[] parts = originalFilename.split("\\.");
				uploadFile=new File(file.getAbsolutePath()+"/"+parts[0]+"("+i+")"+"."+parts[1]);
				i++;
			}
			header.transferTo(uploadFile);
		}
		if(photos.length>0) {//处理宠物图片
			for (MultipartFile photo : photos) {
				if (!photo.isEmpty()) {
					String originalFilename = header.getOriginalFilename();
					header.transferTo(new File(file.getAbsolutePath()+"/"+originalFilename));
				}
			}
		}
		return "success";
	}
}
